package com.project.mapper;

import com.project.bean.ShoppingCarBean;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface IShopMapper {
    /**
     * 判断指定用户指定商品，在购物车中是否存在
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 数量
     */
    @Select("select count(pk_shoppingCarId) from  t_shoppingCar where" +
            " fk_userId=#{userId} and fk_productId=#{productId}")
    @ResultType(int.class)
    public int hasUserShop(@Param("userId") int userId,@Param("productId") int productId);

    /**
     * 向购物车中添加商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @param num 购买数量
     */
    @Insert("insert into t_shoppingCar(fk_userId,fk_productId,s_num)" +
            " values(#{userId},#{productId},#{num})")
    public void addShop(@Param("userId") int userId,
                        @Param("productId") int productId,
                        @Param("num") int num);

    /**
     * 购物车商品累加
     * @param  userId 用户ID
     * @param  productId 商品ID
     * @param num 累加数量
     */
    @Update("update t_shoppingCar set s_num=s_num+#{num}" +
            " where fk_userId=#{userId} and fk_productId=#{productId}")
    public void addDeShop(@Param("userId") int userId,@Param("productId") int productId,@Param("num") int num);

    /**
     * 修改购物车数量
     * @param id 购物车ID
     * @param num 新数量
     */
    @Update("update t_shoppingCar set s_num=#{num} " +
            "where pk_shoppingCarId=#{id}")
    public void updateNum(@Param("id")int id,@Param("num")int num);

    /**
     * 移除购物车商品
     * @param id 购物车ID
     */
    @Delete("delete from t_shoppingCar where pk_shoppingCarId=#{id}")
    public void del(int id);

    /**
     * 查询指定用户的购物车
     * @param userId 用户ID
     * @return 购物车集合
     */
    @Select("SELECT p.*,s.s_num,s.pk_shoppingCarId FROM t_shoppingCar s,t_product p " +
            " WHERE s.`fk_productId`=p.`pk_productId` AND s.`fk_userId`=#{userId};")
    @ResultMap("shopMap")
    public List<ShoppingCarBean> findByUser(@Param("userId") int userId);

    /**
     * 删除指定用户的购物车集合
     * @param userId 用户ID
     */
    @Delete("delete from t_shoppingCar where fk_userId=#{userId}")
    public void delByUser(@Param("userId") int userId);
}
